<?php

// #####################
// ## PHP-Suche 1.4.3 ##
// #####################

/* *** Licencja ***

Obowiązki i ograniczenia
-------------------------

Nota Copyright oraz link do "http://www.gaijin.at/" muszą pozostać nienaruszone, 
nie wolno ich usuwać lub chować i powinny pozostać w tym samym niezmiennym
dobrze widocznym miejscu.

Kod żródłowy skryptu nie może być pod żadnym pozorem przedmiotem sprzedaży, 
to samo dotyczy darmowej lub innej publikacji w internecie, zeszytach, CD lub 
w pakietach z innym oprogramowaniem

Prawa użytkownika
------------------

Skrypt wyszukiwarki może być stosowany tylko w celach prywatnych.
Zabrania się stosowania skryptu na stronach komercyjnych z uwzględnieniem
świadczonych usług tworzenia stron www. 

Wszystkie pozostałe prawa włącznie z prawem publikacji są własnością autora.

Użytkownikom skryptu nie przysługuje ze strony autora żadne prawo do pomocy 
technicznej (Support).

Skrypt może być dopasowywany do potrzeb użytkownika.

Nota prawna (Copyright) i link do "http://www.gaijin.at/" muszą pozostać 
niezmienne co reguluje punk: "Obowiązki i ograniczenia"  

Łamanie postanowień licencyjnych jest łamaniem praw autorskich i będzie ścigane
w oparciu o prawo cywilne.

Odpowiedzialność cywilna
-------------------------                                    

Stosowanie skryptu odbywa się na własną odpowiedzialność.
Autor skryptu nie ponosi żadnej odpowiedzialności za prawidłowość funcjonowania
tego oprogramowania.
Tym samym autor nie ponosi żadnej odpowiedzialności za pośrednie lub 
bezpośrednie szkody wynikłe ze stosowania tego skryptu.
Obejmuje to przede wszystkim szkody osprzętu (Hardware), systemów operacyjnych 
i innego oprogramowania w tym szkody finansowe wynikłe z przerw w działalności
gospodarczej firm. 

Odstępstwa
----------

Wyjątek od odstąpienia niektórych od postanowień licencyjnych jest możliwe 
tylko i wyłącznie w sytuacji wyrazenia pisemnej zgody przez autora.
Tego rodzaju wnioski a tym samym pisemna zgoda autora odbywają się w drodze 
wymiany eletronicznej poczty (e-Mail).

W przypadku pytań do autora w sprawie pytań odstepstwa od licencji proszę
pisać na adres e-Mail: info@gaijin.at .


Wersja profesjonalna
--------------------

Wersja profesjonalna zawiera kilka funkcji do dyspozycji osób, które w 
wniosły wyrażny wkład w rozwoju tego skryptu (wybrani tłumacze lub osoby, które
przyczyniły się w inny sposób do rozwoju skryptu).  
W przypadku pytań proszę pisać na adres e-Mail:  <webmaster@gaijin.at>.

Właściwości wersji profesjonalnej:
  o) Dużo dodatkowych możliwości konfiguracyjnych.                                              
  o) Przeszukiwanie podkatalogów na dowolną głębokość.                     
  o) Dzielenie wyników szukania na strony, przy można dowonie definiować
     ilość wyników na jednej stronie.

*/

define('INTERN_CALL', '1');

// *********************
// *** Konfiguracja ***
// *********************

// Wersja językowa / Language
include_once('language/polish.php');
//include_once('language/polnish.php');

// Nazwa domeny do wyświetlenia w wynikach
// np. "http://www.gaijin.at"
$DomainName = 'http://'.GetParam('SERVER_NAME', 'S'); // 'S'<- stanadrowe ustawienie: skrypt i pliki znajdują sie w tym samym katalgu 

// Katalog Root- Folder gdzie znajdują się pliki do przeszukania
// Przykład: $RootDir=dirname('/htdocs');
$RootDir = dirname(GetParam('SCRIPT_FILENAME', 'S'));  // 'S'<- stanadrowe ustawienie: skrypt i pliki znajdują sie w tym samym katalgu  

// Nazwa i ścieżka dostępu do pliku gdzie będą zapisywane zapytania wyszukiwania
// (pusta znienna '' oznacza deaktywacje procesu zapisu)
// np. "../../files/logs/search_words.log"
$SearchWordLog = '';

// Długość fragmentów tekstu gdzie występuje zgodność z zapytaniem (ilość znaków)
$Found_Piece_Len = 50;

// Przeszukiwany folder
// np.: $AllowedDirs = $RootDir.'/content';
$AllowedDir = $RootDir; // <- stanadrowe ustawienie: skrypt i pliki znajdują sie w tym samym katalgu

// Dozwolone rozszerzenia plików zapisane w tablicy PHP (Array), oddzielone przecinkiem
// np.: $AllowedExts=array('.php','.php3','.php4','.htm','.html','.ihtml','.shtm','.shtml','.txt');
$AllowedExts = array('.php','.html','.shtml');

// Dekodowanie HTML-Entities (zamiana  "&copy;" zu "©")
$EntityDecode = true;

// Linki otwierają się w nowym oknie lub karcie, false dla linków otwierających się w tym samym oknie lub karcie
$LinkTargetBlank = true;

// Zestaw znaków, strona kodowa dla skryptu
// Przykład: $Charset = 'utf-8';
$Charset = 'iso-8859-2';

// *****************************************************************************
// Poniższe ustawienia nie powinny uledz zmianie
// DIE FOLGENDEN EINSTELLUNGEN SOLLTEN NICHT VERÄNDERT WERDEN!
// DO NOT CHANGE ANY OF THE FOLLOWING SETTINGS!

$SearchIsUTF8 = (strtolower($Charset) == 'utf-8');

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title><?php echo GetLngStr('PageTitle'); ?></title>

<meta name="title" content="<?php echo GetLngStr('PageTitle'); ?>">
<meta name="author" content="Werner Rumpeltesz">
<meta name="robots" content="noindex,nofollow">
<meta http-equiv="content-type" content="text/html; charset='<?php echo $Charset; ?>">
<link rel=stylesheet type="text/css" href="search.css">

</head>
<body>



<h4><?php echo GetLngStr('PageTitle'); ?></h4>

<?php
  $SearchTerm = FormatSearchString(stripslashes(GetParam("q", "P")));
  if (!$SearchTerm) $SearchTerm = FormatSearchString(stripslashes(GetParam("q", "G")));
?>

<table border=0 cellspacing=0 cellpadding=0><tr><td>
<form class=formbox action="<?php echo GetParam('PHP_SELF', 'S'); ?>" method="post">
<table border=0 cellspacing=0 cellpadding=1>
<tr><td class=formfield nowrap><?php echo GetLngStr('FormSearchTerm'); ?>&nbsp;</td><td><input type="text" name="q" size=40 maxlength=250 value="<?php echo $SearchTerm; ?>"></td></tr>
<tr><td></td><td class=formfield><input type="submit" value="<?php echo GetLngStr('FormSubmitButton'); ?>" name="submit">&nbsp;&nbsp;&nbsp;<?php echo GetLngStr('FormAndOperator'); ?></td></tr>
</table>
</form>
</td></tr></table>

<p><small><b>PHP-Suche</b> powered by <a href="http://www.gaijin.at/" target="_blank">www.gaijin.at</a></small></p>

<br>

<?php

if($SearchTerm){
  // Protokołowanie zapytań
  if(file_exists($SearchWordLog)) {
    $fp=@fopen($SearchWordLog, 'a');
    if($fp) {
      flock($fp,2);
      fputs($fp,$SearchTerm."\r\n",256);
      flock($fp,3);
      fclose($fp);
    }
  }

  echo '<h4>'.GetLngStr('Result').'</h4>'."\n";

  $files=ReadDirs($AllowedDir, $AllowedExts);

  $ResultCount=0;
  if($files && $SearchTerm){
    foreach($files as $f){
      if(SearchFile($f,$SearchTerm)){
        $fn=$f;
        if(substr($f,0,strlen($RootDir))==$RootDir) $fn=$DomainName.substr($f,strlen($RootDir));
        $ResultCount++;
        echo $ResultCount.'. ';
        echo '<a href="'.$fn.'"';
        if ($LinkTargetBlank) echo ' target="_blank"';
        echo '><b>'.$Site_Title.'</b></a><br>';
        echo '<span class=small><span class=grey>'.$Site_Content.'</span></span><br>';
        echo '<span class=grey>'.GetLngStr('ResultItemFile').'</span> <span class=green>'.$fn.'</span>';
        echo ' - ';
        echo '<span class=grey>'.GetLngStr('ResultItemSize').'</span> <span class=green>'.round(filesize($f)/1024,2).' '.GetLngStr('ResultItemSizeKB').'</span>';
        echo '<br>';
        echo "<br>\n";
      }
    }
    clearstatcache();
  }
  echo '<p>'.GetLngStr('ResultPagesFound', $ResultCount).'</p>'."\n";
  echo '<p><small><b>PHP Search</b> powered by <a href="http://www.gaijin.at/" target="_blank">www.gaijin.at</a></small></p>'."\n";
}

// ############################################################################

function SearchFile($localfile, $search){
  global $Found_Piece_Len;
  global $EntityDecode;
  global $RootDir;
  global $DomainName;
	global $Charset, $SearchIsUTF8;
	
  global $Site_Title;
  global $Meta_Title;
  global $Site_Content;
  global $Meta_Description;
  global $Meta_Robots;

  $Site_Title='';
  $Meta_Title='';
  $Meta_Keywords='';
  $Site_Content='';
  $Meta_Description='';
  $Meta_Robots='';
  
  $url = $localfile;
  if (substr($localfile, 0, strlen($RootDir)) == $RootDir) $url = $DomainName.substr($localfile, strlen($RootDir));

  // *** Wyszukanie zawartości znaczników Meta ***
  $gmtarray=get_meta_tags($url);
  while(list($key,$val)=each($gmtarray)){
    switch(strtolower($key)){
      case 'title': $Meta_Title=$val; break;
      case 'keywords': $Meta_Keywords=$val; break;
      case 'description': $Meta_Description=$val; break;
      case 'robots': $Meta_Robots=strtolower($val); break;
      case 'revisit': $Meta_Revisit=strtolower($val); break;
      case 'revisit-after': $Meta_RevisitAfter=strtolower($val); break;
    }
  }
  
  // *** Wczytanie treści danych (lub prztworzenie PHP) ***
  $fp=@fopen($url,'r');
  if(!$fp) return false;
  $content='';
  while(!feof($fp)){
    $content.=fgets($fp,10240);
  }
  fclose($fp);
  
  // Usuwanie UTF-8 BOM, rozpoznanie strony kodowej
  $isutf8 = false;
  if (substr($content, 0, 3) == "\xEF\xBB\xBF") {
		// Usuwanie UTF-8 BOM
		$content = substr($content, 3);
		$isutf8 = true;
  } else {
		if (preg_match('/<head.*?>.*?<meta [^>]*content[^>]*=[^>]*charset[^>]*=([a-z_\-\d]+)[^a-z_\-\d]*>.*?<\/head>/si', $content, $matches) == 1) {
			if (count($matches) == 2) {
				$pagecharset = strtolower(trim($matches[1]));
				if ($pagecharset == 'utf-8') {
					$isutf8 = true;
				}
			}
		}
  }

  // Zu durchsuchende Dateien kodieren oder dekodieren
  if ($SearchIsUTF8 && !$isutf8) {
		$content = utf8_encode($content);
	} else if (!$SearchIsUTF8 && $isutf8) {
		$content = utf8_decode($content);
	}

  // HTML-Entities konvertieren
  if ($EntityDecode) {
    $content = html_entity_decode($content, ENT_COMPAT, $Charset);
  } else {
		$content = str_replace('&nbsp;', ' ', $content);
	}
	
	// PHP-Scripts entfernen
  $content = preg_replace('/<\?.*?\?>/s', '', $content);

  // *** Seitentitel ermitteln ***
  $Site_Title = GetSiteTitle($content);
  if(!$Site_Title) $Site_Title = $Meta_Title;
  if(!$Site_Title) $Site_Title = basename($url);

	// Kopfzeilen entfernen
	$content = preg_replace('/<head.*?>.*?<\/head>/si', '', $content);
	
	// Zu durchsuchende Daten zusammenstellen
	$searchtitle = $Site_Title;
	if ($searchtitle != $Meta_Title) $searchtitle .= ' '.$Meta_Title;
	$content = $searchtitle.' '.$Meta_Keywords.' '.$Meta_Description.' '.trim($content);

  $content = strip_tags($content);
  $content = str_replace("\n", ' ', $content);
  $content = str_replace("\r", '', $content);
  $sc = ' '.trim($content);

  while(strpos($sc,'  ')){
    $sc=str_replace('  ',' ',$sc);
  }
  $content=$sc;

  // *** Suchen ***
  $found = false;
  if ($SearchIsUTF8) {
		$a = explode(' ', mb_convert_case($search, MB_CASE_LOWER, $Charset));
		$lowcontent = mb_convert_case($content, MB_CASE_LOWER, $Charset);
  } else {
		$a = explode(' ', strtolower($search));
		$lowcontent = strtolower($content);
  }
  $result_text = '';
  foreach ($a as $arg) {
    $p0 = strpos($lowcontent, $arg);
    if($p0 > 0){
      $p1 = $Found_Piece_Len;
      $p2 = $Found_Piece_Len;
      if (($p0-$p1) < 0) $p1 = $p0;
      $result_text .= '...' . htmlspecialchars(substr($content, $p0 - $p1, $p1));
      $result_text .= '<span class=hit>'. htmlspecialchars(substr($content, $p0, strlen($arg))) . '</span>';
      $result_text .= htmlspecialchars(substr($content, $p0 + strlen($arg), $p2)) . '...';
      $found = true;
    } else {
      $found = false;
      break;
    }
  }

  if (!$found) return false;

  $Site_Content = $result_text;

  return true;
}

// ############################################################################

function FormatSearchString($search){
  while (strpos($search, '  ')) {
    $search = str_replace('  ', ' ', $search);
  }
  return trim($search);
}

// ############################################################################

function ReadDirs($d,$ExtArray){
  $fileArray=array();
  if($hDir = opendir($d)){
    while($file=readdir($hDir)){
      if(!is_dir($d.'/'.$file)){
        // *** .*-Dateien (zB .htaccess) ignorieren ***
        if(substr($file,0,1)!='.'){
  		    foreach($ExtArray as $ext){
		        if(substr(strtolower($file),strlen($file)-strlen($ext),strlen($ext))==strtolower($ext)){
    			    array_push($fileArray,$d.'/'.$file);
		        	continue;
		        }
		      }
	      }
      }
    }
    closedir($hDir);
  }
  return $fileArray;
}

// ############################################################################

function GetSiteTitle($content)
{
  $p1=strpos(strtolower($content),'<title>');
  if(!$p1) return false;
  $p2=strpos(strtolower($content),'</title>',$p1);
  if(!$p2) return false;
  return trim(substr($content,$p1+7,$p2-$p1-7));
}

// ############################################################################

function GetParam($ParamName, $Method = 'P', $DefaultValue = '') {
  if ($Method == 'P') {
    if (isset($_POST[$ParamName])) return $_POST[$ParamName]; else return $DefaultValue;
  } else if ($Method == 'G') {
    if (isset($_GET[$ParamName])) return $_GET[$ParamName]; else return $DefaultValue;
  } else if ($Method == 'S') {
    if (isset($_SERVER[$ParamName])) return $_SERVER[$ParamName]; else return $DefaultValue;
  }
}

// ############################################################################

function GetLngStr($sId, $sParams = '') {
	global $Lang;
  global $SearchIsUTF8;
  
	if (isset($Lang[$sId]))
		$sResult = $Lang[$sId];
	else
		$sResult = '{Missing string "'.$sId.'"}';

  $aParams = explode("\t", $sParams);
  for ($i = 0; $i < count($aParams); $i++) {
    $sResult = str_replace('%s'.($i + 1).'%', $aParams[$i], $sResult);
  }
  
  if (!$SearchIsUTF8) $sResult = utf8_decode($sResult);
  
  return $sResult;
}

// ############################################################################

?>



</body>
</html>
